/**
 * Universidad Del Valle De Guatemala.
 * Algoritmos y Estructuras de Datos.
 * Sección 20.
 * Miguel Enrique Zea Arenales.
 * Carné 09238.
 * 20/09/2012.
 */
package heapshuffman;

/**
 * @author Miguel Zea
 * Interfaz para una cola con prioridad. 
 * Tomado del texto Java Structures de Duane A. Bailey capítulo 13.
 * http://www.cs.williams.edu/JavaStructures/Book.html
 */
public interface PriorityQueue<E extends Comparable<E>> {

    /**
     * @pre La cola no está vacía.
     * @post Regresa el valor mínimo en la cola con prioridad.
     */
    public E getFirst();

    /**
     * @pre La cola no está vacía.
     * @post Regresa y elimina el valor mínimo en la cola con prioridad.
     */
    public E remove();

    /**
     * @pre El valor es comparable y no nulo.
     * @post El valor se agrega a la cola con prioridad.
     */
    public void add(E value);
    
    /**
     * @pre Ninguna.
     * @post Regresa verdadero si y sólo si no hay elementos en la cola.
     */
    public boolean isEmpty();

    /**
     * @pre Ninguna.
     * @post Regresa el número de elementos en la cola.
     */
    public int size();
    
    /**
     * @pre Ninguna.
     * @post Elimina todos los elementos de la cola.
     */
    public void clear();

}
